package cn.stylefeng.guns.modular.ums.service;

import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
import cn.stylefeng.guns.modular.cms.model.params.AdParam;
import cn.stylefeng.guns.modular.ums.entity.Member;
import cn.stylefeng.guns.modular.ums.model.params.MemberParam;
import cn.stylefeng.guns.modular.ums.model.result.MemberResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 会员信息表 服务类
 * </p>
 *
 * @author yzb
 * @since 2019-11-07
 */
public interface MemberService extends IService<Member> {

    /**
     * VIP到期处理
     *
     * @author yzb
     * @Date 2020-02-03
     */
    boolean updateMemberVipExpire();

    /**
     * 更新会员VIP
     *
     * @param number 数量
     * @param  vipId 1-月度会员，2-季度会员，3-年度会员，4-终身会员
     * @author yzb
     * @Date 2019-11-07
     */
    boolean updateMemberVip(int number,int vipId,Integer memberId);


    /**
     * 更新推广学生
     *
     * @param  type 0-普通用户，1-认证学生，2-认证教师，3-绑定学生，4-完成推广任务教师  详见RecommendType
     * @author yzb
     * @Date 2019-11-07
     */
    Member updateRecommendNumber(int type,Member param);


    /**
     * 处理推广机制
     *
     * @param  type 0-普通用户，1-认证学生，2-认证教师，3-绑定学生，4-完成推广任务教师  详见RecommendType
     * @author yzb
     * @Date 2019-11-07
     */
    boolean manageRecommendNumber(int type,Member param);

    /**
     * 推广奖励操作
     *
     * @author yzb
     * @Date 2019-11-07
     */
    boolean promotionManage(Member param);

    /**
     * 会员注册(新增会员信息)
     *
     * @author yzb
     * @Date 2019-11-07
     */
    Member add(MemberParam param);

    /**
     * 删除
     *
     * @author yzb
     * @Date 2019-11-07
     */
    void delete(MemberParam param) ;

    /**
     * 更新
     *
     * @author yzb
     * @Date 2019-11-07
     */
    boolean  update(MemberParam param) ;

    /**
     * 会员认证
     *
     * @author yzb
     * @Date 2019-11-07
     */
    boolean  memberValidation(MemberParam param) ;


    /**
     * 查询单条数据，Specification模式
     *
     * @author yzb
     * @Date 2019-11-07
     */
    MemberResult findBySpec(MemberParam param);

    /**
     * 查询列表，Specification模式
     *
     * @author yzb
     * @Date 2019-11-07
     */
    List<MemberResult> findListBySpec(MemberParam param);

    /**
     * 查询分页数据，Specification模式
     *
     * @author yzb
     * @Date 2019-11-07
     */
     LayuiPageInfo findPageBySpec(MemberParam param);

    /**
     * 查询分页数据，Specification模式
     *
     * @author yzb
     * @Date 2019-11-07
     */
    Page<Map<String, Object>> findPageMapBySpec(MemberParam param);


    /**
     * 获取会员信息
     * @param param 主要传输ID、手机号或者身份证等唯一性参数
     * @return
     */
    MemberResult getMember(@Param("paramCondition") MemberParam param);

    /**
     * 登陆时验证会员信息
     * @param phone  手机号
     * @param password  密码
     * @param verifyCode  验证码
     * @return
     */
    MemberResult getMemberForLogin(String phone,String password,String verifyCode);


    /**
     * 获取会员信息
     * @param phone
     * @return
     */
    Member getMemberByPhone(String phone);


    /**
     * 获取会员信息
     * @param openId
     * @return
     */
    MemberResult getMemberByOpenId(String openId);


}
